{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "collapsed_sections": [
        "AwCm2218R8XH",
        "uV_HTgQQSc-k"
      ],
      "authorship_tag": "ABX9TyPUBTSrHy4yBJA7QsHOmx99",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/kellydingzx/ecg_notebooks/blob/main/Simple_AF_Detector.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Download databases and Import libraries"
      ],
      "metadata": {
        "id": "AwCm2218R8XH"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "! wget -r -N -c -np https://physionet.org/files/mitdb/1.0.0/"
      ],
      "metadata": {
        "id": "lmWCuw9P0wjC"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "id": "pGatvVHhQ7hf"
      },
      "outputs": [],
      "source": [
        "! wget -r -N -c -np https://physionet.org/files/nsrdb/1.0.0/\n",
        "! wget -r -N -c -np https://physionet.org/files/afdb/1.0.0/"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import pip\n",
        "import os\n",
        "\n",
        "try:\n",
        "    import wfdb\n",
        "except ModuleNotFoundError:\n",
        "    pip.main(['install', \"wfdb\"])\n",
        "    import wfdb\n",
        "\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt "
      ],
      "metadata": {
        "id": "jqK654OlSGXR"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "! pip install neurokit2"
      ],
      "metadata": {
        "id": "LXsSinbGSYJw"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/gdrive')"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "OzTCW9C3Fy5H",
        "outputId": "e1194e5a-14ff-40a8-dc58-6db68ac3d8ad"
      },
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Mounted at /content/gdrive\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Functions"
      ],
      "metadata": {
        "id": "uV_HTgQQSc-k"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# def get_peaks(sample_path, leads, fs):\n",
        "#     signal, rest = wfdb.rdsamp(sample_path, sampfrom=0, sampto=60*60*fs*2, \n",
        "#                                 channel_names = leads)\n",
        "#     cleaned = nk2.ecg_clean(signal, fs, method='neurokit2')\n",
        "#     signals, info = nk2.ecg_peaks(cleaned, fs, method='neurokit2')\n",
        "\n",
        "#     return info[\"ECG_R_Peaks\"]\n",
        "def get_peaks(sample_path, leads, fs):\n",
        "    annots = wfdb.rdann(sample_path, 'atr', sampfrom=0, sampto=None)\n",
        "\n",
        "    return annots.sample \n",
        "\n",
        "def get_rr_drr(peaks, fs):\n",
        "    rr_intervals = np.diff(peaks)\n",
        "    rr_intervals = np.divide(rr_intervals, fs)\n",
        "    d_rr = np.diff(rr_intervals)\n",
        "\n",
        "    return rr_intervals[1:], d_rr"
      ],
      "metadata": {
        "id": "PZSBd64WSfwb"
      },
      "execution_count": 135,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def get_nec(plot_x, plot_y):\n",
        "    x_min, x_max = min(plot_x), max(plot_x)\n",
        "    y_min, y_max = min(plot_y), max(plot_y)\n",
        "\n",
        "    x_min = 200 if x_min<200 else x_min\n",
        "    y_min = -1000 if y_min<-1000 else y_min\n",
        "    x_max = 2000 if x_max>2000 else x_max\n",
        "    y_max = 2000 if y_max>2000 else y_max\n",
        "\n",
        "    x_start, x_fin = (x_min//25-1)*25 , (x_max//25+1)*25\n",
        "    y_start, y_fin = (y_min//25-1)*25, (y_max//25+1)*25\n",
        "\n",
        "        \n",
        "    nec = 0\n",
        "    for x_i in range(int(x_start), int(x_fin), 25):\n",
        "        for y_i in range(int(y_start), int(y_fin), 25):\n",
        "          if np.any((plot_x >= x_i) & (plot_x < x_i + 25) & \n",
        "                  (plot_y >= y_i) & (plot_y < y_i + 25)):\n",
        "            nec += 1\n",
        "            # x_ind = np.where(np.logical_and(plot_x>=x_i, plot_x<x_i+25))[0]\n",
        "            # y_ind = np.where(np.logical_and(plot_y>=y_i, plot_y<y_i+25))[0]\n",
        "            # in_box = np.intersect1d(x_ind, y_ind)\n",
        "            # if len(in_box)>0: nec+=1\n",
        "    \n",
        "    return nec"
      ],
      "metadata": {
        "id": "AQpg5hAfSsZo"
      },
      "execution_count": 136,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def full_nec(example_path, leads, fs, window_size):\n",
        "\n",
        "    peak_idx = get_peaks(example_path, leads, fs)\n",
        "    annots = wfdb.rdann(example_path, 'atr', sampfrom=0, sampto=None)\n",
        "    af_idx = []\n",
        "    for i in range(len(annots.sample)):\n",
        "      if annots.symbol[i] != 'N':\n",
        "        af_idx.append(annots.sample[i])\n",
        "\n",
        "    # print(len(af_idx), len(annots.sample))\n",
        "    nec_records = {}\n",
        "    for i in range(0, len(peak_idx)-window_size, window_size+1):\n",
        "        peak_chosen = peak_idx[i:i+window_size+1]\n",
        "        rr, drr = get_rr_drr(peak_chosen, fs)\n",
        "        plot_x = rr*1000\n",
        "        plot_y = drr*1000\n",
        "        nec = get_nec(plot_x, plot_y)\n",
        "        segment = (peak_chosen[0], peak_chosen[-1])\n",
        "        nec_records[segment] = nec\n",
        "    \n",
        "    return nec_records, af_idx"
      ],
      "metadata": {
        "id": "eC6fJBy_St8y"
      },
      "execution_count": 168,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def get_nsr(nec_records, opti):\n",
        "   counts = 0\n",
        "   for seg, nec in nec_records.items():\n",
        "     if nec > opti:\n",
        "       counts += 1\n",
        "   return counts/len(nec_records)"
      ],
      "metadata": {
        "id": "9XtjN5ntSvj1"
      },
      "execution_count": 138,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def get_results(nec_records, af_idx, opti):\n",
        "    true_pos, true_neg, false_pos, false_neg = 0,0,0,0\n",
        "    for seg, nec in nec_records.items():\n",
        "        found = np.where(np.logical_and(af_idx>seg[0],af_idx<seg[1]))[0]\n",
        "        if nec > opti and len(found) != 0:\n",
        "            true_pos += 1\n",
        "        elif nec <opti and len(found) == 0:\n",
        "            true_neg +=1\n",
        "        elif nec<opti and len(found)!=0:\n",
        "            false_neg +=1\n",
        "        elif nec>opti and len(found) == 0:\n",
        "            false_pos +=1\n",
        "    return true_pos, true_neg, false_pos, false_neg"
      ],
      "metadata": {
        "id": "DUk_dpkpSxaz"
      },
      "execution_count": 179,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def get_stats(true_pos, true_neg, false_pos, false_neg):\n",
        "    sensitivity = None if true_pos+false_neg == 0 else true_pos/(true_pos+false_neg)\n",
        "    specificity = None if true_neg+false_pos == 0 else true_neg/(true_neg+false_pos)\n",
        "    # ppv = true_pos/(true_pos+false_pos)\n",
        "    # f1 = None if sensitivity == None or ppv==0 else 2*ppv*sensitivity/(ppv+sensitivity)\n",
        "    return sensitivity, specificity"
      ],
      "metadata": {
        "id": "fNQufH4dSziF"
      },
      "execution_count": 172,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def af_analyse(nec_records, af_idx, window_size, opti):\n",
        "    tp, tn, fp, fn = get_results(nec_records, af_idx, opti)\n",
        "    sen, spe = get_stats(tp, tn, fp, fn)\n",
        "    return sen, spe"
      ],
      "metadata": {
        "id": "SVHWpbo9S1PF"
      },
      "execution_count": 141,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "def nsr_analyse(example_path, leads, fs, window_size, opti):\n",
        "    nec_records, _ = full_nec(example_path, leads, fs, window_size)\n",
        "    counts = get_nsr(nec_records, opti)\n",
        "    return counts"
      ],
      "metadata": {
        "id": "9Rs8zsQ_S29b"
      },
      "execution_count": 142,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Tests"
      ],
      "metadata": {
        "id": "3eZpFA7MT_53"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "#  true_pos, true_neg, false_pos, false_neg"
      ],
      "metadata": {
        "id": "61-EOKulH8NF"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "model_save_name = str(106)+'-'+'ECG1'+'-'+str(32)+'.npz'\n",
        "path = F\"/content/gdrive/My Drive/1 nec/{model_save_name}\" \n",
        "saved = np.load(path, allow_pickle=True)\n",
        "nec = saved['nec'].item()\n",
        "af = saved['af']\n",
        "for i in range(10, 30):\n",
        "  a, b, c, d = get_results(nec, af, i)\n",
        "  print(get_stats(a, b, c, d))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "qvXacjJ8G9cv",
        "outputId": "a1900bd0-a437-44e9-afec-061ef192427a"
      },
      "execution_count": 195,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(0.9795918367346939, 0.0)\n",
            "(0.96, 0.0)\n",
            "(0.9591836734693877, 0.0)\n",
            "(0.9387755102040817, 0.0)\n",
            "(0.9183673469387755, 0.0)\n",
            "(0.8936170212765957, 0.0)\n",
            "(0.8222222222222222, 0.0)\n",
            "(0.7291666666666666, 0.15384615384615385)\n",
            "(0.6938775510204082, 0.16666666666666666)\n",
            "(0.6363636363636364, 0.2727272727272727)\n",
            "(0.5217391304347826, 0.45454545454545453)\n",
            "(0.3953488372093023, 0.7)\n",
            "(0.26666666666666666, 1.0)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "paths = '/content/physionet.org/files/mitdb/1.0.0/100'\n",
        "annots = wfdb.rdann(paths, 'atr', sampfrom=0, sampto=None)"
      ],
      "metadata": {
        "id": "nJy0q-dFUCCh"
      },
      "execution_count": 146,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "x = annots.symbol\n",
        "x"
      ],
      "metadata": {
        "id": "w_dhm6AfWQED"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "import os\n",
        "arr = os.listdir('/content/physionet.org/files/mitdb/1.0.0/')\n",
        "\n",
        "sample_ids = []\n",
        "for file in arr:\n",
        "    if '.atr' in file:\n",
        "      current_id = int(file[:3])\n",
        "      if current_id not in sample_ids:\n",
        "        sample_ids.append(current_id)\n",
        "sample_ids.sort()\n",
        "\n",
        "# sample_ids.remove(int('03665'))\n",
        "# sample_ids.remove(int('00735'))\n",
        "# sample_ids.remove(int('04043'))\n",
        "\n",
        "all_ids = list(set(sample_ids)) "
      ],
      "metadata": {
        "id": "Bny4klF-X9Yl"
      },
      "execution_count": 143,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "result = {}\n",
        "\n",
        "for win in [32, 64, 128]:\n",
        "  for lead in ['ECG1', 'ECG2']:\n",
        "    nec = []\n",
        "    for id in all_ids:\n",
        "      str_id = str(id)\n",
        "      # if len(str_id)<5:\n",
        "      #   str_id = '0'*(5-len(str_id)) + str_id\n",
        "  \n",
        "      nec, af = full_nec('/content/physionet.org/files/mitdb/1.0.0/'+str_id, [lead], 250, win)\n",
        "      model_save_name = str(id)+'-'+lead+'-'+str(win)+'.npz'\n",
        "      path = F\"/content/gdrive/My Drive/1 nec/{model_save_name}\" \n",
        "      np.savez(path, nec=nec, af=af)"
      ],
      "metadata": {
        "id": "V00bTrCUYERa"
      },
      "execution_count": 169,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "import pandas as pd"
      ],
      "metadata": {
        "id": "DcBP7EfbKztV"
      },
      "execution_count": 170,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "df_sen = pd.DataFrame(0.0, index=range(1, 128), columns=[32, 64, 128])\n",
        "df_spe = pd.DataFrame(0.0, index=range(1, 128), columns=[32, 64, 128])\n",
        "\n",
        "for win in [32, 64, 128]:\n",
        "  for opti in range(1, win):\n",
        "    sens = []\n",
        "    spes = []\n",
        "    for id in all_ids:\n",
        "      for lead in ['ECG1', 'ECG2']:\n",
        "        model_save_name = str(id)+'-'+lead+'-'+str(win)+'.npz'\n",
        "        path = F\"/content/gdrive/My Drive/1 nec/{model_save_name}\" \n",
        "        saved = np.load(path, allow_pickle=True)\n",
        "        nec = saved['nec'].item()\n",
        "        af = saved['af']\n",
        "  \n",
        "        sen, spe = af_analyse(nec, af, win, opti)\n",
        "        if sen == None or spe == None:\n",
        "          break\n",
        "        sens.append(sen)\n",
        "        spes.append(spe)\n",
        "    print((np.mean(sens), np.mean(spes)))\n",
        "    df_sen.loc[opti, win] = np.mean(sens)\n",
        "    df_spe.loc[opti, win] = np.mean(spes)\n",
        "      "
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "zga9H4aNbCZJ",
        "outputId": "1f606ae0-08c1-4fca-8cbb-e17b8c4d8c8a"
      },
      "execution_count": 173,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0004608294930875576)\n",
            "(0.999624060150376, 0.009038769785614105)\n",
            "(0.9996190476190475, 0.026933944709649847)\n",
            "(0.9985578231292518, 0.06690694031907236)\n",
            "(0.9913748107938828, 0.10604446767386261)\n",
            "(0.9772238699487774, 0.12860275239144192)\n",
            "(0.9612314176811262, 0.16220583930737173)\n",
            "(0.9405531720886829, 0.17965437748869204)\n",
            "(0.9164312884603565, 0.19983538394309486)\n",
            "(0.8970425782779605, 0.23293188092101136)\n",
            "(0.8577445404912662, 0.27555688638902415)\n",
            "(0.813158300102607, 0.3224777913359228)\n",
            "(0.7907193591379654, 0.3985807364876465)\n",
            "(0.7652016353397755, 0.44119664675871945)\n",
            "(0.7196899120780611, 0.46774866786576175)\n",
            "(0.662137510975407, 0.4926004785190375)\n",
            "(0.6115201660914663, 0.5241477748154767)\n",
            "(0.5653311221620402, 0.552858165411605)\n",
            "(0.5012332595139367, 0.5869970724823342)\n",
            "(0.45488045290355683, 0.6138556599724767)\n",
            "(0.3960071162529, 0.6463287161167423)\n",
            "(0.30121897753868687, 0.6968408666708763)\n",
            "(0.19861071556578958, 0.7753845282219596)\n",
            "(0.11316582448998205, 0.8741663009289736)\n",
            "(0.0, 1.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.001984126984126984)\n",
            "(1.0, 0.009398496240601503)\n",
            "(1.0, 0.02837941628264209)\n",
            "(1.0, 0.07336545729402873)\n",
            "(0.9931547619047619, 0.09722435569209763)\n",
            "(0.9847310912445012, 0.13319941778547442)\n",
            "(0.9751603112175103, 0.18412523856072244)\n",
            "(0.9595425670268108, 0.19991775010247917)\n",
            "(0.9439173396631381, 0.21497887033601318)\n",
            "(0.9371643506114624, 0.23039168013246353)\n",
            "(0.9326434073966968, 0.23834164347557205)\n",
            "(0.9222489029052996, 0.24988146773861059)\n",
            "(0.8987267503435749, 0.2638862363127069)\n",
            "(0.8787195389993999, 0.2993636050911593)\n",
            "(0.8512250196849627, 0.3198334377610693)\n",
            "(0.8365890498996702, 0.3479281265935401)\n",
            "(0.8200423240848236, 0.360110391844138)\n",
            "(0.7951531527974581, 0.4269483231889247)\n",
            "(0.7750124972489775, 0.43231071105905244)\n",
            "(0.7649229967980337, 0.44121427248362227)\n",
            "(0.7259075948476137, 0.46514082625193737)\n",
            "(0.704042223821651, 0.49908016091051804)\n",
            "(0.6897143348658105, 0.5043498168498168)\n",
            "(0.6631370940998271, 0.5314849624060151)\n",
            "(0.6370868215034852, 0.547108843537415)\n",
            "(0.6156172260133835, 0.5625)\n",
            "(0.5923606635040015, 0.5741667085774637)\n",
            "(0.5755239515045155, 0.5842490842490842)\n",
            "(0.540526292634765, 0.5867746288798921)\n",
            "(0.5213357427335813, 0.5973714047022317)\n",
            "(0.509262363462124, 0.6160079582072063)\n",
            "(0.4875971157587657, 0.6238344988344989)\n",
            "(0.45835652296044216, 0.6302798392084107)\n",
            "(0.44556345235219386, 0.6459183673469387)\n",
            "(0.4264656677370548, 0.6539509488005729)\n",
            "(0.4144059518537398, 0.65466378859236)\n",
            "(0.39899068428632706, 0.6720238095238095)\n",
            "(0.3643126182009104, 0.6774973147153599)\n",
            "(0.3465138239218876, 0.6860119047619048)\n",
            "(0.33183996130487614, 0.6928793256433009)\n",
            "(0.31690152060877935, 0.7210204081632653)\n",
            "(0.28141712927329576, 0.7339544513457555)\n",
            "(0.25708745471995487, 0.7463435374149661)\n",
            "(0.23054579165690275, 0.7866928736067698)\n",
            "(0.21715116191798292, 0.8181210602263234)\n",
            "(0.1937886373434254, 0.827891156462585)\n",
            "(0.1634482718799489, 0.8538904078377764)\n",
            "(0.13269807299979713, 0.8668822405664512)\n",
            "(0.10508588330224387, 0.8772673662766542)\n",
            "(0.07613172371236887, 0.8883477633477633)\n",
            "(0.058105518364139054, 0.8997039724980901)\n",
            "(0.03443555008210181, 0.9386278753925813)\n",
            "(0.01432806324110672, 0.9637445887445887)\n",
            "(0.004300047778308648, 0.9910714285714286)\n",
            "(0.0, 1.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.0)\n",
            "(1.0, 0.016666666666666666)\n",
            "(1.0, 0.016666666666666666)\n",
            "(1.0, 0.020833333333333332)\n",
            "(1.0, 0.03993375046006625)\n",
            "(1.0, 0.11487179487179486)\n",
            "(0.9962406015037595, 0.13866396761133604)\n",
            "(0.9932126696832579, 0.19666666666666668)\n",
            "(0.9824754901960784, 0.21174242424242426)\n",
            "(0.9754242081447965, 0.22243589743589745)\n",
            "(0.9706851971557853, 0.23782051282051286)\n",
            "(0.948844537815126, 0.24666666666666667)\n",
            "(0.9427319004524886, 0.25)\n",
            "(0.938701923076923, 0.25)\n",
            "(0.9339285714285716, 0.25)\n",
            "(0.9217717086834736, 0.25625)\n",
            "(0.9155217086834735, 0.2602678571428571)\n",
            "(0.9108193277310924, 0.27053571428571427)\n",
            "(0.8958333333333333, 0.28080357142857143)\n",
            "(0.872079831932773, 0.2903361344537815)\n",
            "(0.8558333333333333, 0.29301470588235295)\n",
            "(0.8188095238095237, 0.29375)\n",
            "(0.8140178571428571, 0.2959558823529412)\n",
            "(0.8002310924369749, 0.3079365079365079)\n",
            "(0.7948739495798319, 0.3190009337068161)\n",
            "(0.7939810924369748, 0.3211805555555555)\n",
            "(0.7867261904761905, 0.32666666666666666)\n",
            "(0.7845273109243698, 0.33819444444444446)\n",
            "(0.7804796918767508, 0.3480357142857143)\n",
            "(0.7718452380952381, 0.3571486928104575)\n",
            "(0.7643242296918767, 0.38472222222222224)\n",
            "(0.75015756302521, 0.3940972222222222)\n",
            "(0.7487289915966386, 0.3970588235294118)\n",
            "(0.7384908963585435, 0.4027777777777778)\n",
            "(0.7230082417582417, 0.40902777777777777)\n",
            "(0.713422619047619, 0.4177777777777777)\n",
            "(0.7077442900237018, 0.4444444444444445)\n",
            "(0.6696673669467786, 0.45125000000000004)\n",
            "(0.663000700280112, 0.4533333333333333)\n",
            "(0.6285562558356675, 0.4533333333333333)\n",
            "(0.618977501256913, 0.4575)\n",
            "(0.612484827264239, 0.46375)\n",
            "(0.5912345910023928, 0.4970760233918129)\n",
            "(0.5996276844070961, 0.5482142857142858)\n",
            "(0.5989133986928105, 0.5525)\n",
            "(0.5902012774806892, 0.5596428571428571)\n",
            "(0.5764133986928105, 0.5652777777777779)\n",
            "(0.5677579365079366, 0.5809523809523809)\n",
            "(0.5602801855007737, 0.5892857142857142)\n",
            "(0.5436111111111112, 0.5916666666666666)\n",
            "(0.5398015873015873, 0.6)\n",
            "(0.5394747899159664, 0.6035714285714285)\n",
            "(0.5329621848739496, 0.6166666666666666)\n",
            "(0.5242460317460317, 0.6232142857142857)\n",
            "(0.5140079365079365, 0.6232142857142857)\n",
            "(0.5106746031746031, 0.6232142857142857)\n",
            "(0.4803174603174603, 0.6357142857142858)\n",
            "(0.44942577030812325, 0.6357142857142858)\n",
            "(0.4392460317460317, 0.6357142857142858)\n",
            "(0.4336904761904762, 0.6357142857142858)\n",
            "(0.42813492063492065, 0.6357142857142858)\n",
            "(0.41646825396825393, 0.6416666666666667)\n",
            "(0.4056323211102623, 0.6553571428571429)\n",
            "(0.3993154761904762, 0.6553571428571429)\n",
            "(0.3935705266955267, 0.6553571428571429)\n",
            "(0.3706074929971989, 0.6625)\n",
            "(0.3648091736694678, 0.6625)\n",
            "(0.356359126984127, 0.6625)\n",
            "(0.3530257936507937, 0.6666666666666666)\n",
            "(0.3511507936507937, 0.675)\n",
            "(0.34823412698412703, 0.675)\n",
            "(0.34823412698412703, 0.675)\n",
            "(0.34122023809523816, 0.675)\n",
            "(0.3384751400560224, 0.6795454545454545)\n",
            "(0.3328869047619048, 0.6799999999999999)\n",
            "(0.3273313492063492, 0.6849999999999999)\n",
            "(0.3255339635854342, 0.7083333333333333)\n",
            "(0.31184523809523806, 0.725)\n",
            "(0.30892857142857144, 0.7416666666666666)\n",
            "(0.3085119047619048, 0.7488636363636363)\n",
            "(0.30580357142857145, 0.7488636363636363)\n",
            "(0.3055288461538462, 0.7488636363636363)\n",
            "(0.30160714285714285, 0.7488636363636363)\n",
            "(0.2917395104895105, 0.7525000000000001)\n",
            "(0.25583874458874456, 0.7534090909090909)\n",
            "(0.2505357142857143, 0.7534090909090909)\n",
            "(0.2441468253968254, 0.7534090909090909)\n",
            "(0.2391468253968254, 0.766801948051948)\n",
            "(0.2391468253968254, 0.766801948051948)\n",
            "(0.23685924369747902, 0.7779761904761904)\n",
            "(0.21450320512820512, 0.7892857142857143)\n",
            "(0.20236111111111113, 0.7892857142857143)\n",
            "(0.19511752136752136, 0.7910714285714284)\n",
            "(0.17840277777777777, 0.7979166666666667)\n",
            "(0.175625, 0.81125)\n",
            "(0.1612019230769231, 0.8196428571428571)\n",
            "(0.14978001165501165, 0.8375)\n",
            "(0.13580128205128206, 0.8458333333333332)\n",
            "(0.130952380952381, 0.8553571428571429)\n",
            "(0.1263690476190476, 0.85625)\n",
            "(0.11491071428571427, 0.85625)\n",
            "(0.10324404761904762, 0.85625)\n",
            "(0.08449404761904762, 0.85625)\n",
            "(0.08011904761904762, 0.85625)\n",
            "(0.07678571428571428, 0.8625)\n",
            "(0.0646153846153846, 0.875)\n",
            "(0.052976190476190475, 0.875)\n",
            "(0.04298245614035088, 0.9210526315789473)\n",
            "(0.03383458646616541, 0.9736842105263158)\n",
            "(0.027313311688311692, 0.975)\n",
            "(0.018727106227106226, 0.9833333333333332)\n",
            "(0.006666666666666666, 0.9875)\n",
            "(0.0, 0.9875)\n",
            "(0.0, 1.0)\n",
            "(0.0, 1.0)\n",
            "(0.0, 1.0)\n",
            "(0.0, 1.0)\n",
            "(0.0, 1.0)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "df_sen.to_csv(\"/content/gdrive/My Drive/1 nec/sen.csv\" )\n",
        "df_spe.to_csv(\"/content/gdrive/My Drive/1 nec/spe.csv\" )"
      ],
      "metadata": {
        "id": "Hk_-NIZ1qxr_"
      },
      "execution_count": 174,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "y = df_sen[32].values\n",
        "x = 1- df_spe[32].values\n",
        "\n",
        "plt.figure(figsize=(12,10))\n",
        "plt.xlabel('1-Specificity')\n",
        "plt.ylabel('Sensitivity')\n",
        "plt.scatter(1-df_spe[32].values, df_sen[32].values, label='window size 32')\n",
        "plt.scatter(1-df_spe[64].values, df_sen[64].values, label='window size 64')\n",
        "plt.scatter(1-df_spe[128].values, df_sen[128].values, label='window size 128')\n",
        "\n",
        "plt.legend()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 623
        },
        "id": "-2yLUV_iM1rm",
        "outputId": "a90b05a3-5871-4885-a6be-2de01a3835bc"
      },
      "execution_count": 191,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7fc5a89c9fd0>"
            ]
          },
          "metadata": {},
          "execution_count": 191
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 864x720 with 1 Axes>"
            ],
            "image/png": "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3t5e7dmzRzfddNOw69977z2tXr1aR44cUWZmpl566SVJ0qpVq/Szn/1MBw8e9Lt+w4YNMsbo0KFDeuGFF3Tvvfeqp6fH97ldXV2aOnWq9u7dK0kBP/fVV19VTk6ODh48qMOHD+u2227ze/2OO+7QgQMHdODAARUUFOiHP/yhent79cADD2jLli1qaGjQN77xDf3oRz8a08/o3/7t3/Txxx/rqquukuTZ+V6+fLlyc3P161//Wg8//PCY7gsASDwxGbHdVCc9tdAz9e+phRFpT7dtf5vWbj2ktk63rOTr2UwSjaEmXQId6sngcCxevFgNDQ06e/aspk+friVLlqi+vl579uxRaWnpsOvnzZunwsJC33uPHz+uzs5OdXZ2+hLfe+65x3f9W2+9pbvvvluS9OlPf1pXXnmljh49qtLSUu3evVt79+5VRUWFzp07p/Pnz+v9999XXp7/4YRFixbp9ddf15o1a7Rnzx5lZGQE/F6eeOIJORwOrV69Ws3NzTp8+LBuvfVWFRYW6rHHHlNra/inl9vb23XPPffo2Wef9e1SP/XUU9qxY4daW1u1atUqff/73w/7vgCAxBXVneUo9Xiu2dnsd9hPomczApt0NdDRGA+ampqqefPmadOmTVq6dKny8/P15ptv6tixY7r22muHXT99+nTf1ykpKb4SjnBdd911qq+v1/z583Xrrbfq9OnT2rhxoxYvXjzs2muuuUaNjY3asWOHHnnkES1btkzV1f4HKX7zm99o8+bN2r17tyTJWqsFCxbo7bffHlN8knT27FlVVFTo7//+7/W5z31OknTq1CkdPHhQn/3sZyVJd91117AdcQAAgopSj+dgvZnp2YyhJt0OdMTGgw5RWlqqJ598UjfddJNKS0v19NNPq6ioSMaYkN6fmZmpzMxMvfXWW5Kk559/3u/e3udHjx7Vhx9+qLy8PE2bNk1z5szR5s2btWTJEr8Yhjp58qRmzJihu+++W1VVVWpsbPR7/YMPPtDq1au1efNmORyeU8t5eXk6deqUL4Hu7e3VkSNHQv6ZfPzxx/riF7+or3/967rzzjt965deeqm6urp09OhRSdLrr78e8BcNAAACilKPZ3o2I1STLoEONgY0rPGgAZSWlqq9vV1LlizRpz71KaWlpQUs3xjJs88+q9WrV6uwsFDWXpxb9N3vflf9/f1atGiR7rrr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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    }
  ]
}